// 对项目的axios进行二次封装
import axios from "axios";
// 封装需要实现的效果
// 配置基础路径和超时限制
// 添加进度条信息  nprogress
// 返回的响应不再需要从data属性当中拿数据，而是响应就是我们要的数据
// 统一处理请求错误

// 创建axios的实例化对象  这个创建出来的实例ajax  你之前怎么玩axios 现在就怎么玩ajax
const request = axios.create({
  baseURL: "/api", //基础路径
  timeout: 10000, //超时时间
});

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 请求发送成功执行的回调函数
  // config这是包含这次请求的所有信息所组成的一个对象(请求报文)
  // 开启进度条
  return config;
});

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 响应成功执行的回调函数
    // response这是响应的所有的信息所组成的一个对象(响应报文)
    // 统一处理响应的结果 方便组件使用数据
    // 关闭进度条
    return response.data;
  },
  function (error) {
    // 响应失败执行的回调函数
    // 统一处理错误
    // 拿到错误状态码 根据状态码做出不同提示
    if (error.response.status == 401) {
      alert("未授权");
    } else if (error.response.status == 403) {
      alert("禁止访问");
    } else if (error.response.status == 404) {
      alert("错误访问");
    } else if (error.response.status == 500) {
      alert("服务器出错");
    }
    // 不用再组件中自己处理错误
    return new Promise(() => {}); //返回一个pending的promise
  }
);

export default request;
